package com.zhuzhe.blog.article.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhuzhe.blog.article.requestDto.*;
import com.zhuzhe.blog.article.responseVo.ArticlePageListVo;
import com.zhuzhe.blog.article.responseVo.ArticleVo;
import com.zhuzhe.blog.base.ResponseData;
import com.zhuzhe.blog.article.entity.Article;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhuzhe.blog.enums.ArticleStatusEnum;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * <p>
 * 文章信息表 服务类
 * </p>
 *
 * @author u53
 * @since 2020-10-05
 */
public interface IArticleService extends IService<Article> {

    /**
     * 条件分页查询文章列表
     * @param articleDto
     * @return
     */
    ResponseData<IPage<ArticlePageListVo>> queryPage(ArticleSerachDto articleDto);

    /**
     * 通过文章id查询文章详情及标签
     * @param id 文章id
     * @return
     */
    ResponseData<ArticleVo> findArticleAndLabelById(String id, String userId);

    /**
     * 修改或新增文章
     * @param articleDto
     * @return
     */
    ResponseData<String> updateOrSave(ArticleDto articleDto);

    /**
     * 修改状态：
     * @param id 文章id
     * @param statusEnum 状态枚举类
     * @return
     */
    ResponseData<String> updateStatus(String id, ArticleStatusEnum statusEnum);

    /**
     * 根据用户ID查询公开或未公开的文章列表
     * @param articleUserDto
     * @return
     */
    ResponseData<IPage<ArticlePageListVo>> findListByUserId(ArticleUserDto articleUserDto);

    /**
     * 根据文章id更新点赞数
     * @return
     */
    ResponseData<String> updateThumhup(ArticleThumhupDto articleThumhupDto);

    /**
     * 统计公开且审核通过的文章数
     * @return
     */
    ResponseData<Integer> getArticleTotal();

    /**
     * 统计每个分类下的文章数
     * @return
     */
    ResponseData<Map> selectCategoryTotal();

    /**
     * 更新文章浏览次数
     * @param id 文章id
     * @return
     */
    ResponseData<String> updateViewCount(String id, HttpServletRequest request);

    /**
     * 通过分类id或标签id查询公开且已审核通过的文章列表
     * @param articleListDto 分类id或标签id、分页对象
     * @return
     */
    ResponseData<IPage<ArticlePageListVo> > findListByLabelIdOrCategoryId(ArticleListDto articleListDto);

    ResponseData<Map> selectMonthArticleTotal();

}
